package cn.tedu.servlet;

import cn.tedu.http.HttpRequest;
import cn.tedu.http.HttpResponse;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

/**
 * Author：程Sir
 * Name： SmallServer
 * Content:
 *  根据javaEE（企业级应用开发）的标准开发规范，设定业务处理的类都是应该一个具体的服务端应用程序，
 *  这样的应用程序就被称为是servlet。
 *  按照开发的规范，业务的处理是在 service方法中实现的，
 *  数据的获取是通过 封装了客户端请求信息的HttpRequest对象
 *  数据的响应是通过 封装了服务端响应信息的HttpResponse对象的
 *
 *  其实在JavaEE中，Servlet 是一个标准的接口。
 *
 *  这个类是用来处理注册请求的
 */
public class RegisterServlet {

    public void service(HttpRequest request, HttpResponse response){
        // 获取数据
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String nikename = request.getParameter("nikename");
        String age = request.getParameter("age");

        /*
            是否为null，如果有字段为null，这响应一个错误提示页面：提交的注册信息有误，请重新提交！
         */
        if (username==null || password==null || nikename==null || age ==null || !age.matches("[0-9]+")){
            File file = new File("./webapps/myweb/registerInfo_error.html");
            response.setFileEntity(file);
            return;
        }else{// 校验通过
            // 将数据写入文件中：user.txt
            // 创建对象
            try (RandomAccessFile raf = new RandomAccessFile("user.txt","rw")){

                // 首先判断用户名是否重复
                for (int i = 0; i <raf.length()/100; i++) {
                    raf.seek(i*100);
                    byte[] datas = new byte[32];
                    // 读32个字节，拿到的就是用户名
                    raf.read(datas);
                    String name = new String(datas,"utf-8");// 32
                    // 去除空白
                    name = name.trim();
                    // 判断
                    if (username.equals(name)){
                        System.out.println("=====存在======");
                        /*
                            如果用户名重复了，则提示：您提交的用户名已存在！请重新注册。
                         */
                        File file = new File("./webapps/myweb/registerInfo_have.html");
                        response.setFileEntity(file);
                        return;
                    }

                }


                // 写入数据之前，要将指针移动到文件的末尾，这样做的就是拼接。而不是覆盖
                raf.seek(raf.length());

                byte[] datas = username.getBytes("utf-8");
                // 将用户名的长度进行扩容  32
                datas = Arrays.copyOf(datas, 32);
                // 写入用户名
                raf.write(datas);

                datas = password.getBytes("utf-8");
                // 将密码的长度进行扩容  32
                datas = Arrays.copyOf(datas, 32);
                // 写入密码
                raf.write(datas);

                datas = nikename.getBytes("utf-8");
                // 将昵称的长度进行扩容  32
                datas = Arrays.copyOf(datas, 32);
                // 写入昵称
                raf.write(datas);

                // 写入年龄 4
                raf.writeInt(Integer.valueOf(age));
                /*
                     成功 则提示：恭喜您。您提交的数据已完成注册！
                */
                File file = new File("./webapps/myweb/registerInfo_success.html");
                response.setFileEntity(file);
                return;

            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        System.out.println("用户信息已完成注册！");



    }

}
